An assert
is inappropriate for parameter validation because assertions can be disabled at runtime in the JVM, meaning that a bad
operational setting would completely eliminate the intended checks. Further, assert
s that fail throw AssertionError
s, rather
than throwing some type of Exception
. Throwing Error
s is completely outside of the normal realm of expected
catch
/throw
behavior in normal programs.
This rule raises an issue when a public
method uses one or more of its parameters with assert
s.
Noncompliant code example
public void setPrice(int price) {
assert price >= 0 && price <= MAX_PRICE;
// Set the price
}
Compliant solution
public void setPrice(int price) {
if (price < 0 || price > MAX_PRICE) {
throw new IllegalArgumentException("Invalid price: " + price);
}
// Set the price
}